////////////////////////////////////////////////////////////////////////////////

#ifndef _SERVER_H_
#define _SERVER_H_

////////////////////////////////////////////////////////////////////////////////

#include "server_engine.h"
#include "server_network.h"
#include <boost/asio.hpp>

////////////////////////////////////////////////////////////////////////////////


/** This class represents game server
*   It manipulates server's engine, network and synchronizes them
*
*  @author   Roman Pasechnik
*  @since    Jun 23th, 2009
*  @updated  Jun 23th, 2009
*/
class Server
{
////////////////////////////////////////////////////////////////////////////////

public:

////////////////////////////////////////////////////////////////////////////////


    /** Constructor */
    Server();


    /** Destructor */
    ~Server();


////////////////////////////////////////////////////////////////////////////////


    /** Send server packet to all clients */
    void Send( const ServerPacket& _packet );


    /** Process packet from client */
    void Receive( const ClientPacket& _packet );


////////////////////////////////////////////////////////////////////////////////

private:    

////////////////////////////////////////////////////////////////////////////////


    /** IO Service object */
    boost::asio::io_service m_io_service;


    /** Server engine */
    ServerEngine m_Engine;


    /** Server network */
    ServerNetwork m_Network;


////////////////////////////////////////////////////////////////////////////////
};


////////////////////////////////////////////////////////////////////////////////

#endif

////////////////////////////////////////////////////////////////////////////////

